#ifndef __MDL_BUTTON_H
#define __MDL_BUTTON_H

// 按键状态定义
#define BUTTON_RELEASED     0
#define BUTTON_PRESSED      1

// 按键事件类型定义
#define BUTTON_EVENT_NONE       0
#define BUTTON_EVENT_CLICK      1   // 短按
#define BUTTON_EVENT_LONG_PRESS 2   // 长按
#define BUTTON_EVENT_DOUBLE_CLICK 3 // 双击
#define BUTTON_EVENT_MULTI_CLICK 4  // 多次点击

// 按键时间参数定义 (单位: ms)
#define BUTTON_DEBOUNCE_TIME    20      // 消抖时间
#define BUTTON_LONG_PRESS_TIME  1000    // 长按判定时间
#define BUTTON_MULTI_CLICK_TIME 300     // 多击间隔时间

// 最大多次点击次数
#define BUTTON_MAX_MULTI_CLICK  5

// 按键结构体
typedef struct {
    int pin;                        // 按键引脚
    int state;                      // 当前状态
    int lastState;                  // 上次状态
    unsigned int pressTime;         // 按下时间
    unsigned int releaseTime;       // 释放时间
    unsigned int lastReleaseTime;   // 上次释放时间
    int clickCount;                 // 点击计数
    int isPressed;                  // 是否按下标志
    int event;                      // 按键事件
} Button;

// 函数声明
void MDL_Button_Init(Button* btn, unsigned int pin);
void MDL_Button_Update(Button* btn, unsigned int currentTime);
int  MDL_Button_Get_Event(Button* btn);
void MDL_Button_Clear_Event(Button* btn);

#endif